package main

import (
	"fmt"
	"programme/go/cryptoExample/mycrypto"
)

// test aes
// func main() {
// 	fmt.Println("test crypto")
// 	key := []byte("yangbiaoyangbiao")
// 	result, err := mycrypto.AesEncrypt([]byte("hello world"), key)
// 	if err != nil {
// 		panic(err)
// 	}
// 	fmt.Println(base64.StdEncoding.EncodeToString(result))
// 	origData, err := mycrypto.AesDecrypt(result, key)
// 	if err != nil {
// 		panic(err)
// 	}
// 	fmt.Println(string(origData))

// }

// test rsa
// func main() {
// 	// mycrypto.GenerateRSAKeyPair()
// 	msgString := "hello world."
// 	msgByte := []byte(msgString)
// 	fmt.Println(msgByte)
// 	sign := mycrypto.GetRSASign(msgByte, "private.pem")
// 	fmt.Println(sign)
// 	//接受到的签名
// 	acceptsign := sign

// 	//验证签名
// 	result := mycrypto.VerifyRSASign(msgByte, acceptsign, "public.pem")
// 	fmt.Println("验证结果：", result)

// 	encData, err := mycrypto.RSAEncrypt(msgByte, "public.pem")
// 	if err != nil {
// 		fmt.Println(err)
// 	}
// 	fmt.Println(encData)
// 	fmt.Println("=======================")
// 	decData, err := mycrypto.RSADecrypt(encData, "private.pem")
// 	fmt.Println(decData)
// 	fmt.Println(string(decData))
// }

// // test sha256
// func main() {
// 	// fmt.Println("test sha259")
// 	msgString := "hello world."
// 	msgByte := []byte(msgString)
// 	fmt.Println(mycrypto.GetSHA256HashCode(msgByte))
// }

// // test ecc
// func main() {
// 	// fmt.Println("test ecc")
// 	msgString := "hello world."
// 	msgByte := []byte(msgString)
// 	// mycrypto.GenerateECCKeyPair()
// 	rtext, stext := mycrypto.GetECCSign(msgByte, "eccprivate.pem")
// 	fmt.Println(rtext)
// 	fmt.Println(stext)
// 	// 接收到的签名
// 	acceptrtext := rtext
// 	acceptstext := stext
// 	// 验证签名
// 	recvMsgString := "hello world."
// 	recvMsgByte := []byte(recvMsgString)
// 	verifySignECC := mycrypto.VerifyECCSign(recvMsgByte, acceptrtext, acceptstext, "eccpublic.pem")
// 	fmt.Println("验证结果：", verifySignECC)
// 	fmt.Println("=======================")
// 	// mycrypto.ECCEncrypt(msgByte, "eccprivate.pem")
// 	// ECCEncrypt
// 	encData, err := mycrypto.ECCEncrypt(msgByte, "eccpublic.pem")
// 	if err != nil {
// 		fmt.Println(err)
// 	}
// 	fmt.Println(encData)
// 	// ECCDecrypt
// 	bytes, err := mycrypto.ECCDecrypt(encData, "eccprivate.pem")
// 	if err != nil {
// 		fmt.Println(err)
// 	}
// 	fmt.Println(bytes)
// 	fmt.Println(string(bytes))
// }

//========================================
//sm test
//sm4
// func main() {
// 	fmt.Println("sm4 test.")
// 	key := []byte("yangbiaoyangbiao")
// 	content := []byte("hello world")
// 	result, err := mycrypto.SM4Encrypt(content, key)
// 	if err != nil {
// 		panic(err)
// 	}
// 	fmt.Println(result)
// 	origData, err := mycrypto.SM4Decrypt(result, key)
// 	if err != nil {
// 		panic(err)
// 	}
// 	fmt.Println(string(origData))
// }

// test sm3
// func main() {
// 	// fmt.Println("test sm3")
// 	msgString := "hello world."
// 	msgByte := []byte(msgString)
// 	fmt.Println(mycrypto.GetSM3HashCode(msgByte))
// }

//sm2
func main() {
	fmt.Println("sm2 test.")
	content := []byte("hello world")
	// mycrypto.GenerateSM2KeyPair()
	rtext, stext := mycrypto.GetSM2Sign(content, "sm2private.pem")
	fmt.Println(rtext)
	fmt.Println(stext)
	content1 := []byte("hello world")
	verifySM2Sign := mycrypto.VerifySM2Sign(content1, rtext, stext, "sm2public.pem")
	fmt.Println("验证结果：", verifySM2Sign)
	fmt.Println("=======================")
	// SM2Encrypt
	encData, _ := mycrypto.SM2Encrypt(content, "sm2public.pem")
	fmt.Println(encData)
	// SM2Decrypt
	bytes, _ := mycrypto.SM2Decrypt(encData, "sm2private.pem")
	fmt.Println(string(bytes))
}
